From 0296f1a43a803c0783781f9941a840256304641f Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 5 Aug 2013 16:49:18 +0200 Subject: [PATCH] gtkdnd: Use RGBA windows when dragging if possible If we have rgba visuals and a composited screen we should just use a RGBA window rather than shaped windows. --- gtk/gtkdnd.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index c3f842c05b..d9d888f26e 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -3378,6 +3378,8 @@ gtk_drag_set_icon_surface (GdkDragContext *context, GdkScreen *screen; GdkRectangle extents; cairo_pattern_t *pattern; + GdkVisual *rgba_visual; + gboolean has_rgba; g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); g_return_if_fail (surface != NULL); @@ -3386,8 +3388,15 @@ gtk_drag_set_icon_surface (GdkDragContext *context, screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context)); + rgba_visual = gdk_screen_get_rgba_visual (screen); window = gtk_window_new (GTK_WINDOW_POPUP); + has_rgba = + rgba_visual != NULL && + gdk_screen_is_composited (screen); + if (has_rgba) + gtk_widget_set_visual (GTK_WIDGET (window), rgba_visual); + gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND); gtk_window_set_screen (GTK_WINDOW (window), screen); set_can_change_screen (window, TRUE); @@ -3398,7 +3407,8 @@ gtk_drag_set_icon_surface (GdkDragContext *context, gtk_widget_set_size_request (window, extents.width, extents.height); gtk_widget_realize (window); - if (cairo_surface_get_content (surface) != CAIRO_CONTENT_COLOR) + if (cairo_surface_get_content (surface) != CAIRO_CONTENT_COLOR && + !has_rgba) { cairo_surface_t *saturated; cairo_region_t *region; -- 2.30.2